草庐IT

Lua 垃圾回收

全部标签

go - 了解内存分配的工作原理和垃圾收集器

假设我正在为多个演出制作内存缓存。为了在缓存达到最大大小时释放空间,我将删除不经常访问的项目。当我删除这些项目时,是否会释放内存以供计算机分配给其他进程和/或我的应用程序?我知道Go使用垃圾收集器,所以大概操作系统在垃圾收集之前无法访问该内存,然后我的应用程序将消耗更少的内存资源。这是正确的吗? 最佳答案 您将如何删除项目?Comment:soifIamstoringtheitemsinasliceIwoulddoa=append(a[:i],a[i+1:]...)–Blankman哪个可能有效也可能无效。slice是什么类型?Go

performance - 是否可以为 Go 使用不同的垃圾收集策略?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭6年前。Improvethisquestion正如标题所说,不知道是否可以更改Go使用的GC策略?

go - 需要帮助来理解 Go 语言中的垃圾收集

我对GoLang的垃圾收集器有点困惑。考虑以下代码,我在其中为我的类型T实现了阅读器接口(interface)。typeTstruct{headerHeaderdata[]*MyDataType}func(t*T)Read(p[]byte)(int,error){t.Header=*(*Header)(t.readFileHeader(p))t.Data=*(*[]*MyDataType)(t.readFileData(p))}在阅读器函数中,我将使用unsafe.Pointer将数据转换为MyDataType,这将指向使用反射模块创建的slice(这更复杂,但为了这个示例应该够了)f

go - 如果一个 child 正在使用,垃圾会收集父类吗?

我在想,当我创建一个Systemstruct时,buildersystem会消耗很多内存,但结果很简单,所以如果我返回一个address结果,垃圾会知道它可以收集构建器系统内存吗?如何测试这个?我模拟这样的情况://Builderisusedtobuild`System`,anditwillcostmuchmemorytypeBuilderstruct{aux[][]intsystem*System}//Systemistheresultof`Builder.build`,thisisrelativelysimpletypeSystemstruct{avg[]float32}funcN

go - golang 中的垃圾收集——它是如何发生的?

众所周知,go是一种垃圾收集语言,具有非常高效的垃圾收集器。如果go被编译为机器代码并且没有管理内存释放的运行时环境,怎么会发生这种情况? 最佳答案 Go程序是一组经过编译然后链接在一起的包。其中一个包是runtime,它包括Go垃圾收集器。参见Directorysrc/runtime/ 关于go-golang中的垃圾收集——它是如何发生的?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/quest

go - 为什么 golang 垃圾收集器不实现分代和紧凑型 gc?

Generational和Compactgc已经被认为是最佳实践。但是golang不采用。谁能告诉我原因? 最佳答案 我不是GC专家,但这里有一些链接似乎可以解释设计:https://blog.golang.org/go15gchttps://www.youtube.com/watch?v=aiv1JOfMjm0https://github.com/golang/proposal/blob/master/design/17503-eliminate-rescan.md 关于go-为什么g

memory-management - 我是否需要将 map 设置为 nil 才能对其进行垃圾回收?

假设我有一个简单的映射,其中字符串作为键类型,自定义结构作为值类型。像这样:map[string]*struct我用很多不同的值填充这张map,其中很多值在一段时间后将永远不会再次使用。所以我不确定golang垃圾收集器是否会为我清理我的map,或者我需要自己做。然后我在另一个问题上遇到了这个答案:IsitsafetoremoveselectedkeysfromGolangmapwithinarangeloop?这让垃圾收集器看起来不会为我做这件事,如果我想不时释放一些内存,我唯一的解决方案是将我的映射设置为nil。这是真的吗?还是有另一种方法可以做到这一点而不会丢失我的map中不是“

go - 将 Go Struct 实例转换为 Lua 表

我有一个GoStruct实例,我想使用GopherLua将该实例传递给Lua方法。我的Go代码是这样的:dog:=new(Animal)runParam:=lua.P{Fn:L.GetGlobal("run"),NRet:1,Protect:true,}mt:=luar.MT(context.AppContext.LuaVM,dog)userData:=&lua.LTable{Metatable:*mt}userData.Append(&lua.LUserData{Value:dog,Metatable:mt,Env:mt.LTable})err=L.CallByParam(runPa

opencv - 垃圾收集不适用于 []gocv.Mat

代码中假设img是一个3channel的Mat。代码存在内存泄漏。我猜slice“matsplits”中的指针(引用)不会被垃圾收集删除。我该如何解决?for{matsplits:=gocv.Split(img)matsplits[0].Close()matsplits[1].Close()matsplits[2].Close()}上述代码导致内存泄漏。我确定imgarr中的Mat对象已关闭,但内存使用量仍在增长。为什么?更新:我项目中的部分代码processed:=0forprocessed如果未标记“testsplit”,则会发生内存泄漏。len(testsplit)为2。我检查过

go - 对结构中字段的外部引用是否会阻止该结构被垃圾收集?

例如,如果我有一些typeAstruct{Bstring;Cint},我有一个funcfoo(aA)*string{return&a.B},我用c:=foo(a),a是否必须保留在上下文中,直到c可收集?或者,如果我定义funcfoo1(aA)*string{s:=a.B;return&s这对何时可以收集A有什么影响吗? 最佳答案 在第一个例子中,假设a在调用foo(a)之后没有被使用,a是可收集的,因为你通过了a按值。该函数返回一个指向a副本中的值的指针,因此a变得可收集,但在函数foo中创建的副本不可收集收藏品。现在,如果您将&